package pe.gob.osinergmin.interfase_siaf.dac.gasto.service.impl;

import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pe.gob.osinergmin.interfase_siaf.dac.common.dao.IntfCabDao;
import pe.gob.osinergmin.interfase_siaf.dac.common.dao.IntfDet09Dao;
import pe.gob.osinergmin.interfase_siaf.dac.common.dao.IntfNotDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.BancoDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.CertificadoFaseDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.CertificadoSecuenciaDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.CtaCteDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.ExpedienteSecuenciaDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.FuenteFinancDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.MaestroClasificadorDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.MaestroDetalleDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.MaestroDocumentoDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.MetaDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.OrigenDao;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Area;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Banco;
import pe.gob.osinergmin.interfase_siaf.dac.domain.CertificadoFase;
import pe.gob.osinergmin.interfase_siaf.dac.domain.CertificadoSecuencia;
import pe.gob.osinergmin.interfase_siaf.dac.domain.CtaCte;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Ejecutora;
import pe.gob.osinergmin.interfase_siaf.dac.domain.ExpedienteSecuencia;
import pe.gob.osinergmin.interfase_siaf.dac.domain.FuenteFinanc;
import pe.gob.osinergmin.interfase_siaf.dac.domain.MaestroClasificador;
import pe.gob.osinergmin.interfase_siaf.dac.domain.MaestroDetalle;
import pe.gob.osinergmin.interfase_siaf.dac.domain.MaestroDocumento;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Meta;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Origen;
import pe.gob.osinergmin.interfase_siaf.dac.domain.interfase.IntfCab;
import pe.gob.osinergmin.interfase_siaf.dac.domain.interfase.IntfDet09;
import pe.gob.osinergmin.interfase_siaf.dac.domain.interfase.IntfNot;
import pe.gob.osinergmin.interfase_siaf.dac.gasto.service.ValidacionGastoService;
import pe.gob.osinergmin.interfase_siaf.dac.util.Constantes;

@Service("validacionGastoService")
public class ValidacionGastoServiceImpl implements ValidacionGastoService {
	
	private final Log logger = LogFactory.getLog(getClass());
	
	public static final String CODIGO_VERIFICACION_OK ="1";
	public static final String CODIGO_VERIFICACION_ERROR ="0";
	public static final String ESTADO_ENVIO_P ="P";
	public static final String ESTADO_ENVIO_N ="N";
	public static final String ESTADO_ENVIO_R ="R";
	
	public static final String FASE_CONTRAUTAL_A ="A";
	public static final String FASE_CONTRAUTAL_L ="L";
	public static final String FASE_CONTRAUTAL_P ="P";
	
	public static final String T_GIRO_COBRANZA ="C";
	public static final String T_GIRO_DETRACCIONES ="D";
	public static final String T_GIRO_NORMAL ="N";
	public static final String T_GIRO_RETENCION ="R";
	
	
	@Autowired
	private IntfCabDao intfCabDao;
	
	@Autowired
	private IntfDet09Dao intfDet09Dao;
	
	@Autowired
	private IntfNotDao intfNotDao;	
	
	@Autowired
	private MaestroDocumentoDao  maestroDocumentoDao;
	
	@Autowired
	private MaestroDetalleDao maestroDetalleDao;
	
	@Autowired
	private OrigenDao origenDao;
	
	@Autowired
	private FuenteFinancDao fuenteFinancDao;
	
	@Autowired
	private MaestroClasificadorDao maestroClasificadorDao;
	
	@Autowired
	private BancoDao bancoDao;
	
	@Autowired
	private CtaCteDao ctaCteDao;	
	
	@Autowired
	private CertificadoFaseDao certificadoFaseDao;
	
	@Autowired
	private MetaDao metaDao;
	
	@Autowired
	private ExpedienteSecuenciaDao expedienteSecuenciaDao;
	
	@Autowired
	private CertificadoSecuenciaDao certificadoSecuenciaDao;
	
	
	/*******VALIDACION PARA GASTOS COMPROMISO (G-C)******/	
	@SuppressWarnings("unchecked")
	@Override	
	public String validarGastosCompromisoNuevo(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 		
		 boolean flag = true;
		 IntfCab i =null;
		 List<IntfDet09> detLista  =null;
		 IntfNot n =null;
		 Ejecutora eje = null;
		 MaestroDetalle ma = null;
		 Area area = null;
		 MaestroDocumento md = null;
		 CertificadoFase fa =null;
		 Origen ori = null;
		 FuenteFinanc fte = null;
		 MaestroClasificador mc =null;
		 CertificadoFase cert =null;
		 Meta me  =null;
		 CertificadoSecuencia certS =null;
		 try {
			 i = (IntfCab) params.get("intfCab"); 	    
			 detLista = (List<IntfDet09>) params.get("listaDet");			 
			 n = (IntfNot) params.get("intfNot");	
			 double montoMnTotal = (Double)params.get("montoMnTotal");	 
			 
			 /**VALIDACION DE CAMPOS DE INTF_CAB**/	
			 
			 cert = new CertificadoFase();
			 cert.setSecuencia(i.getIntfCerse());
			 cert.setAnoEje(i.getAnoEje());		
			 cert.setCertificad(i.getIntfCer());			
			 cert.setSecEjec(i.getSecEjec());
			 
			 certS = new CertificadoSecuencia();			
			 certS.setCodDoc(i.getCodDoc());
			 certS.setNumDoc(i.getNumDoc()); 
			 certS.setAnoEje(i.getAnoEje());		
			 certS.setSecEjec(i.getSecEjec());  
			 
			 if(flag){				
				 int numCertif = certificadoFaseDao.verificarExiteCertificado(cert);					
				 if(numCertif==0){ 
					 valor = Constantes.COD_EXISTE_CERTIFICADO_PROCESOS+"/"+
					         Constantes.EXISTE_CERTIFICADO_PROCESOS;
					 flag =false;
				 }	 
			}	
			if(flag){		 
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab > 0){			
					 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+ 
				             Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }
			 }
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){					
					valor =  Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
				             Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	
			}	
			if(flag){
				 eje = new Ejecutora();
				 eje.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(eje);				
				 if(secEje==0){					
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }					
			}
			if(flag){
				 eje = new Ejecutora();
				 eje.setSecEjec(i.getSecEjec2()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(eje);				
				 if(secEje==0){					
					valor = Constantes.COD_SEC_EJEC2_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.SEC_EJEC2_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }			
			}			
			if(flag){
				 ma = new MaestroDetalle();
				 ma.setCodDetall(i.getTipoOpe()); 
				 int  tipoOpe  = maestroDetalleDao.verificarTipoOpe(ma);			
				 if(tipoOpe==0){					
					 valor = Constantes.COD_TIPO_OPE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.TIPO_OPE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){
				 ma = new MaestroDetalle();
				 ma.setCodDetall(i.getModComp()); 
				 int  modComp  = maestroDetalleDao.verificarModComp(ma);			
				 if(modComp==0){					 
					 valor = Constantes.COD_MOD_COMP_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.MOD_COMP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			if(flag){
				 area = new Area();
				 area.setSecArea(i.getSecArea()); 
				 int  secArea  = maestroDetalleDao.verificarSecArea(area);		
				 if(secArea==0){					
					valor = Constantes.COD_SEC_AREA_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.SEC_AREA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){
				 md = new MaestroDocumento();
				 md.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(md); 				
				 if(codDoc==0){					
					valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){				 
				 int  numDoc  = certificadoSecuenciaDao.verificarExiteCertificadoNumDoc(certS);				
				 if(numDoc!=0){					
					valor = Constantes.COD_NUM_DOC_NO_EXISTE_CERT_CAB+"/"+
					        Constantes.NUM_DOC_NO_EXISTE_CERT_CAB;
					 flag =false;
				 }	 
			}	
			//validando el proveedor tipo_id y ruc
			if(flag){
				fa = new CertificadoFase();
				fa.setAnoEje(i.getAnoEje());
				fa.setCertificad(i.getIntfCer());
				fa.setSecuencia(i.getIntfCerse()); 
				fa.setTipoId(i.getTipoId()); 
				fa.setRuc(i.getRuc());
				fa.setSecEjec(i.getSecEjec()); 
				 int  prov  = certificadoFaseDao.verificarExiteProveedor(fa);				
				 if(prov==0){					
					valor = Constantes.COD_TIPO_ID_RUC_INTFCAB+"/"+
					        Constantes.TIPO_ID_RUC_INTFCAB;
					 flag =false;
				 }	 
			}
			/*if(flag){				 
				 if(!FASE_CONTRAUTAL_A.equals(i.getPsFContr()) || 
						 !FASE_CONTRAUTAL_L.equals(i.getPsFContr())||
						 !FASE_CONTRAUTAL_P.equals(i.getPsFContr())){					
					valor = Constantes.COD_PS_F_CONTR_INTFCAB+"/"+
					        Constantes.PS_F_CONTR_INTFCAB;
					 flag =false;
				 }	 
			}*/
			if(flag){
				ori = new Origen();
				ori.setOrigen(i.getOrigen());
				 int  origen  = origenDao.verificarOrigen(ori);	
				 if(origen==0){					
					valor = Constantes.COD_ORIGEN_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.ORIGEN_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				fte = new FuenteFinanc();
				fte.setFuenteFin(i.getFteFin()); 
				 int  fteFin  = fuenteFinancDao.verificarFteFin(fte);	
				 if(fteFin==0){					
					 valor = Constantes.COD_FTE_FIN_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.FTE_FIN_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			/*if(flag){
				CtbConfigRbXCgXTfinanc f = new CtbConfigRbXCgXTfinanc();
				 f.setAnoCtb(i.getAnoEje());
				 f.setFuenteFin(i.getFteFin());
				 f.setTipoFinan(i.getTipoFin()); 
				 int  tipofin  = fuenteFinancDao.verificarTipoFin(f);
				 if(tipofin==0){					
					 valor = Constantes.COD_TIPO_FIN_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.TIPO_FIN_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}*/		
			if(flag){
				 ma= new MaestroDetalle();
				 ma.setCodDetall(i.gettPago()); 
				 int  tPago  = maestroDetalleDao.verificarTPago(ma);			
				 if(tPago==0){					
					valor = Constantes.COD_T_PAGO_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.T_PAGO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 ma = new MaestroDetalle();
				 ma.setCodDetall(i.gettRecurs()); 
				 int  tRecurs  = maestroDetalleDao.verificarTRecurs(ma);			
				 if(tRecurs==0){					
					 valor = Constantes.COD_T_RECURS_NO_EXISTE_INTF_CAB+"/"+
					          Constantes.T_RECURS_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 ma = new MaestroDetalle();
				 ma.setCodDetall(i.gettCompro()); 
				 int  tCompro  = maestroDetalleDao.verificarTCompro(ma);		
				 if(tCompro==0){					
					 valor = Constantes.COD_T_COMPRO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.T_COMPRO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 ma = new MaestroDetalle();
				 ma.setCodDetall(i.getMoneda()); 
				 int  moneda  = maestroDetalleDao.verificarMoneda(ma);		
				 if(moneda==0){				
					valor = Constantes.COD_MONEDA_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.MONEDA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){			
					valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  					
					 valor =  Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					          Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			 
			 /**VALIDACION DE CAMPOS DE INTF_DET09**/
			for(IntfDet09 d :detLista){
				 if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){						
						valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						        Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!d.getSecuencial().equals(i.getSecuencial())){					
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
							     Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 mc = new MaestroClasificador();
					 mc.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(mc);		
					 if(idClasifi==0){								
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}
				if(flag){
					 me = new Meta();
					 me.setAnoEje(i.getAnoEje()); 
					 me.setSecEjec(i.getSecEjec());
					 me.setSecFunc(d.getSecFunc()); 
					 int  secFunc  = metaDao.verificarExiteSecFunc(me);		
					 if(secFunc==0){								
						 valor = Constantes.COD_SEC_FUNC_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.SEC_FUNC_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
			   } 
			   if(flag){
					 mc = new MaestroClasificador();
					 mc.setAnoEje(i.getAnoEje());
					 mc.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(mc);		
					 if(nivClasificad==0){							
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				} 		
			}//fin del for			
			if(flag){				
				List<CertificadoFase> certMontoMn =certificadoFaseDao.bucarMontoMnTotalCert(cert);
				logger.info("Monto Mn Total compromiso nuevo gastos :  "+montoMnTotal); 
				logger.info("Monto MN Total compromiso nuevo gastos bd:  "+certMontoMn.get(0).getSaldoNaci());
				if(certMontoMn.get(0).getSaldoNaci()<montoMnTotal){ 
					valor = Constantes.COD_MONTOMN_DET_MAYOR_MONTO_CERTIFICADO+"/"+
					        Constantes.MONTOMN_DET_MAYOR_MONTO_CERTIFICADO;
					flag =false;				
				}	 
		   } 		
			 /**VALIDACION DE CAMPOS DE INTF_NOT**/
			 if(flag){
				 logger.info("Ingresando a validar secuencial del INTF_NOT"); 
				 int  not  = intfNotDao.verificarSecuencialNot(n);
				 logger.info("RETURN a validar secuencial del INTF_NOT:  "+not); 
				 if(not >0 && flag){						
					 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_NOT+"/"+
						     Constantes.SECUENCIAL_EXISTE_INTF_NOT;
					 flag =false;
				 }	 
			 }
			 if(flag){				
				 if(!n.getSecuencial().equals(i.getSecuencial())){						
					 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_NOT+"/"+
						     Constantes.SECUENCIAL_NO_COINCIDE_INTF_NOT;
					 flag =false;
				 }	 
			 }
			/* if(flag){
				ExpedienteSecuencia e = new ExpedienteSecuencia();
				e.setCorrelativ(n.getCorrelativ()); 
				 logger.info("Ingresando a validar correlativo del INTF_NOT"); 
				 int  idClasifi  = expedienteSecuenciaDao.verificarCorrelativIntfNotGastos(e);
				 logger.info("RETURN a validar correlativo del INTF_NOT:  "+idClasifi);
				 if(idClasifi==0){						
					 valor = Constantes.COD_CORRELATIV_NO_EXISTE_INTF_NOT+"/"+
						     Constantes.CORRELATIV_NO_EXISTE_INTF_NOT;
					 flag =false;
				 }	 
			}*/ 	
		} catch (Exception e) {		
			logger.info("Error al validar los campos de Gastos compromiso: "+e); 			
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
			 i = null;	
			}
			if(detLista!=null){
				detLista =null;
			}
			if(n!=null){
				n=null;
			}			
			if(eje!=null){
				eje=null;
			}
            if(ma !=null){
				ma =null;
			}
            if(area!=null){
				area=null;
			}
            if(md!=null){
				md =null;
			}
            if(fa !=null){
				fa=null;
			}
            if(ori !=null){
				ori=null;
			}
            if(fte !=null){
				fte=null;
			}
            if(mc !=null){
				mc=null;
			}
            if(me !=null){
				me=null;
			}
            if(cert!=null){
            	cert=null;	
            }
            if(certS!=null){
            	certS=null;	
            }
		}
		 return valor;
	}
	
	/**validar Gastos compromiso ampliacion*/	
	@Override	
	@SuppressWarnings("unchecked")
	public String validarGastosCompAmpl(Map<String, Object> params) throws Exception {	
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 IntfCab i =null;
		 List<IntfDet09> detLista =null;
		 ExpedienteSecuencia exp =null;
		 Ejecutora e = null;
		 MaestroDocumento m = null;
		 MaestroClasificador ma = null;
		 Meta meta = null;	
		 CertificadoSecuencia certS =null;
		 try {
			 i = (IntfCab) params.get("intfCab"); 		    
			 detLista = (List<IntfDet09>) params.get("listaDet");		
			 
			 exp = new ExpedienteSecuencia();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativo(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec());
			 exp.setAnoEje(i.getAnoEje());		 
			 exp.setCiclo(i.getCiclo());			 
			 exp.setSecEjec(i.getSecEjec());
			 
			 certS = new CertificadoSecuencia();			
			 certS.setCodDoc(i.getCodDoc());
			 certS.setNumDoc(i.getNumDoc()); 
			 certS.setAnoEje(i.getAnoEje());		
			 certS.setSecEjec(i.getSecEjec()); 
			 
			 
			if(flag){				
				 int expeIngreso = expedienteSecuenciaDao.verificarExiteExpeGasto(exp);					  
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_COMPROMISO_PARA_AMPLIACION+"/"+
					         Constantes.EXISTE_COMPROMISO_PARA_AMPLIACION;
					 flag =false;
				 }	 
			}	
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
							Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}			
			if(flag){
				 e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			if(flag){				
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}					
			if(flag){
				 m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){				 
				 int  numDoc  = certificadoSecuenciaDao.verificarExiteCertificadoNumDoc(certS);				
				 if(numDoc!=0){					
					valor = Constantes.COD_NUM_DOC_NO_EXISTE_CERT_CAB+"/"+
					        Constantes.NUM_DOC_NO_EXISTE_CERT_CAB;
					 flag =false;
				 }	 
			}	
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			 /**VALIDACION DE CAMPOS DE INTF_DET09 G-C AMPLIACION**/
			for(IntfDet09 d :detLista){
				if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 ma = new MaestroClasificador();
					 ma.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(ma);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				} 
				if(flag){
					 meta = new Meta();
					 meta.setAnoEje(i.getAnoEje()); 
					 meta.setSecEjec(i.getSecEjec());
					 meta.setSecFunc(d.getSecFunc()); 
					 int  secFunc  = metaDao.verificarExiteSecFunc(meta);		
					 if(secFunc==0){								
						 valor = Constantes.COD_SEC_FUNC_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.SEC_FUNC_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
			   } 
			   if(flag){
					 ma = new MaestroClasificador();
					 ma.setAnoEje(i.getAnoEje());
					 ma.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(ma);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}			
			}//fin del for			
		} catch (Exception ex) {
			ex.printStackTrace();			
			logger.info("Error validar gasto compromiso ampliacion "+ex); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i=null;
			}
			if(detLista!=null){
				detLista=null;
			}
			if(exp!=null){
				exp=null;
			}			
			if(e!=null){
				e=null;
			}
			if(m!=null){
				m=null;
			}
			if(ma!=null){
				ma=null;
			}
			if(meta!=null){
				meta=null;
			}
			if(certS!=null){
            	certS=null;	
            }
		}		
		 return valor;
	}	
	
    /**validar gastos compromiso rebaja*/		
	@Override
	@SuppressWarnings("unchecked")
	public String validarGastosCompRebaja(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 IntfCab i =null;
		 List<IntfDet09> detLista =null;
		 ExpedienteSecuencia exp =null;
		 Ejecutora e = null;
		 MaestroDocumento m = null;
		 MaestroClasificador ma = null;
		 Meta meta = null;
		 CertificadoSecuencia certS =null;
		 try {
			 i = (IntfCab) params.get("intfCab");   	     
			 detLista = (List<IntfDet09>) params.get("listaDet");
		     double montoTotal = (Double)params.get("montoTotal")*(-1);
		     double montoMnTotal = (Double)params.get("montoMnTotal")*(-1);
		     
			 /***VALIDACION DE CAMPOS DE INTF_CAB G-D REBAJA**/
		     exp = new ExpedienteSecuencia();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativo(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec());
			 exp.setAnoEje(i.getAnoEje());		 
			 exp.setCiclo(i.getCiclo());			 
			 exp.setSecEjec(i.getSecEjec()); 			 
			  
			 certS = new CertificadoSecuencia();			
			 certS.setCodDoc(i.getCodDoc());
			 certS.setNumDoc(i.getNumDoc()); 
			 certS.setAnoEje(i.getAnoEje());		
			 certS.setSecEjec(i.getSecEjec()); 
			 
			 if(flag){				
				 int expeIngreso = expedienteSecuenciaDao.verificarExiteExpeGasto(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_COMPROMISO_PARA_REBAJA+"/"+
					         Constantes.EXISTE_COMPROMISO_PARA_REBAJA;
					 flag =false;
				 }	 
			}		
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}
			if(flag){
				 e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			if(flag){
				 m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){				 
				 int  numDoc  = certificadoSecuenciaDao.verificarExiteCertificadoNumDoc(certS);				
				 if(numDoc!=0){					
					valor = Constantes.COD_NUM_DOC_NO_EXISTE_CERT_CAB+"/"+
					        Constantes.NUM_DOC_NO_EXISTE_CERT_CAB;
					 flag =false;
				 }	 
			}	
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			
			 /**VALIDACION DE CAMPOS DE INTF_DET09 G-D REBAJA**/
			for(IntfDet09 d :detLista){
				if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 ma = new MaestroClasificador();
					 ma.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(ma);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				}
				if(flag){
					 meta = new Meta();
					 meta.setAnoEje(i.getAnoEje()); 
					 meta.setSecEjec(i.getSecEjec());
					 meta.setSecFunc(d.getSecFunc()); 
					 int  secFunc  = metaDao.verificarExiteSecFunc(meta);		
					 if(secFunc==0){								
						 valor = Constantes.COD_SEC_FUNC_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.SEC_FUNC_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
			   } 
			   if(flag){
					 ma = new MaestroClasificador();
					 ma.setAnoEje(i.getAnoEje());
					 ma.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(ma);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}			   
			}//fin del for	
			if(flag){				
				double expeMonto = expedienteSecuenciaDao.bucarMontoTotalCompromiso(exp);
				logger.info("Monto Total compromiso por rebaja :  "+montoTotal); 
				logger.info("Monto Total compromiso por rebaja expediente:  "+expeMonto); 
				if(expeMonto<=montoTotal){ 
					valor = Constantes.COD_MONTO_DET09_MAYOR_MONTOINGRESO+"/"+
					        Constantes.MONTO_DET09_MAYOR_MONTOINGRESO;
					flag =false;				
				}	 
			} 
			if(flag){				
				double expeMontoMn = expedienteSecuenciaDao.bucarMontoMnTotalCompromiso(exp);
				logger.info("Monto Mn Total compromiso por rebaja :  "+montoMnTotal); 
				logger.info("Monto MN Total compromiso por rebaja expediente:  "+expeMontoMn);
				if(expeMontoMn<=montoMnTotal){ 
					valor = Constantes.COD_MONTOMN_DET09_MAYOR_MONTOINGRESO+"/"+
					        Constantes.MONTOMN_DET09_MAYOR_MONTOINGRESO;
					flag =false;				
				}	 
			}	
		} catch (Exception ex) {				
			logger.info("Error validar compromiso rebaja "+ex); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i=null;
			}
			if(detLista!=null){
				detLista=null;
			}
			if(exp!=null){
				exp=null;
			}
			if(e!=null){
				e=null;
			}
			if(m!=null){
				m=null;
			}
			if(ma!=null){
				ma=null;
			}
			if(meta!=null){
				meta=null;
			}
			if(certS!=null){
            	certS=null;	
            }
		}
		 return valor;
	}
	
	/**validar gastos compromiso anulacion y anulacion por error*/	
	@SuppressWarnings("unchecked")
    @Override
	public String validarGastosCompAnulXError(Map<String, Object> params) throws Exception {
    	 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 IntfCab i =null;
		 List<IntfDet09> detLista =null;
		 ExpedienteSecuencia exp =null;
		 Ejecutora e = null;
		 MaestroDocumento m = null;
		 MaestroClasificador ma = null;
		 Meta meta = null;
		 CertificadoSecuencia certS = null;
		 try {
			 i = (IntfCab) params.get("intfCab");   		     
			 detLista = (List<IntfDet09>) params.get("listaDet");
			 
		     double montoTotal = (Double)params.get("montoTotal")*(-1);
		     double montoMnTotal = (Double)params.get("montoMnTotal")*(-1);
			 /**VALIDACION DE CAMPOS DE INTF_CAB G-C ANULACION Y ANULACION POR ERROR**/
		     exp = new ExpedienteSecuencia();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativo(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec());
			 exp.setAnoEje(i.getAnoEje());		 
			 exp.setCiclo(i.getCiclo());			 
			 exp.setSecEjec(i.getSecEjec()); 	
			 
			 certS = new CertificadoSecuencia();			
			 certS.setCodDoc(i.getCodDoc());
			 certS.setNumDoc(i.getNumDoc()); 
			 certS.setAnoEje(i.getAnoEje());		
			 certS.setSecEjec(i.getSecEjec()); 
			 
			 if(flag){				
				 int expeIngreso = expedienteSecuenciaDao.verificarExiteExpeGasto(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_COMPROMISO_PARA_ANULACION+"/"+
					         Constantes.EXISTE_COMPROMISO_PARA_ANULACION;
					 flag =false;
				 }	 
			}			
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}
			if(flag){
				 e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			if(flag){
				 m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){				 
				 int  numDoc  = certificadoSecuenciaDao.verificarExiteCertificadoNumDoc(certS);				
				 if(numDoc!=0){					
					valor = Constantes.COD_NUM_DOC_NO_EXISTE_CERT_CAB+"/"+
					        Constantes.NUM_DOC_NO_EXISTE_CERT_CAB;
					 flag =false;
				 }	 
			}	
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			
			 /**VALIDACION DE CAMPOS DE INTF_DET09 G-C ANULACION y ANULACION POR ERROR**/
			for(IntfDet09 d :detLista){
				 if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 ma = new MaestroClasificador();
					 ma.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(ma);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				} 
				if(flag){
					 meta = new Meta();
					 meta.setAnoEje(i.getAnoEje()); 
					 meta.setSecEjec(i.getSecEjec());
					 meta.setSecFunc(d.getSecFunc()); 
					 int  secFunc  = metaDao.verificarExiteSecFunc(meta);		
					 if(secFunc==0){								
						 valor = Constantes.COD_SEC_FUNC_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.SEC_FUNC_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
			   } 
			   if(flag){
					 ma = new MaestroClasificador();
					 ma.setAnoEje(i.getAnoEje());
					 ma.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(ma);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}			   
			}//fin del for	
			if(flag){
				double expeMonto = expedienteSecuenciaDao.bucarMontoTotalCompromiso(exp);				
				 logger.info("Monto Total compromiso anulacion y x error:  "+montoTotal); 
				 logger.info("Monto Total compromiso anulacion y x error expediente :  "+expeMonto); 
				 if(expeMonto!=montoTotal){ 
					 valor = Constantes.COD_MONTO_DET09_MAYOR_MONTOINGRESO+"/"+
					         Constantes.MONTO_DET09_MAYOR_MONTOINGRESO;
					 flag =false;					
				 }	 
			}
			if(flag){				
				double expeMontoMn = expedienteSecuenciaDao.bucarMontoMnTotalCompromiso(exp); 
				 logger.info("Monto Mn Total compromiso anulacion y x error:  "+montoMnTotal); 
				 logger.info("Monto Mn Total compromiso anulacion y x error expediente:  "+expeMontoMn); 
				 if(expeMontoMn!=montoMnTotal){ 
					 valor = Constantes.COD_MONTOMN_DET09_MAYOR_MONTOINGRESO+"/"+
					         Constantes.MONTOMN_DET09_MAYOR_MONTOINGRESO;
					 flag =false;					
				 }	 
			}	
		} catch (Exception ex) {		
			logger.info("Error validar compromiso anulacion y anulacion por error "+ex); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i=null;
			}
			if(detLista!=null){
				detLista=null;
			}
			if(exp!=null){
				exp=null;
			}
			if(e!=null){
				e=null;
			}
			if(m!=null){
				m=null;
			}
			if(ma!=null){
				ma=null;
			}
			if(meta!=null){
				meta=null;
			}
			if(certS!=null){
            	certS=null;	
            }
		}
		 return valor;
	}
	
	
	
	/*******VALIDACION PARA GASTOS DEVENGADO (G-D)******/
	@SuppressWarnings("unchecked")
    @Override
    public String validarGastosDevengadoNuevo(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 		
		 boolean flag = true;
		 IntfCab i =null;
		 List<IntfDet09> detLista  =null;
		 IntfNot n =null;
		 ExpedienteSecuencia exp =null;
		 Ejecutora eje = null;
		 MaestroDetalle ma = null;		
		 MaestroDocumento md = null;	
		 MaestroClasificador mc =null;
		 Meta me  =null;
		 CertificadoSecuencia certS = null;
		 try {
			 i = (IntfCab) params.get("intfCab");   		     
			 detLista = (List<IntfDet09>) params.get("listaDet");			 
			 n = (IntfNot) params.get("intfNot");	
			 
			 /**VALIDACION DE CAMPOS DE INTF_CAB**/				 
			 exp = new ExpedienteSecuencia();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativo(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec());
			 exp.setAnoEje(i.getAnoEje());		 
			 exp.setCiclo(i.getCiclo());			 
			 exp.setSecEjec(i.getSecEjec()); 
			 
			 certS = new CertificadoSecuencia();			
			 certS.setCodDoc(i.getCodDoc());
			 certS.setNumDoc(i.getNumDoc()); 
			 certS.setAnoEje(i.getAnoEje());		
			 certS.setSecEjec(i.getSecEjec()); 
			  
			 
			if(flag){				
				 int expeIngreso = expedienteSecuenciaDao.verificarExiteExpeGasto(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_DEVENGADO_PARA_NUEVO+"/"+
					         Constantes.EXISTE_DEVENGADO_PARA_NUEVO;
					 flag =false;
				 }	 
			}		
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}	
			if(flag){
				 eje = new Ejecutora();
				 eje.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(eje);				
				 if(anoEje ==0){					
					valor =  Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
				             Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	
			}	
			if(flag){
				 eje = new Ejecutora();
				 eje.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(eje);				
				 if(secEje==0){					
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }					
			}			
			if(flag){
				 md = new MaestroDocumento();
				 md.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(md); 				
				 if(codDoc==0){					
					valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){				 
				 int  numDoc  = certificadoSecuenciaDao.verificarExiteCertificadoNumDoc(certS);				
				 if(numDoc!=0){					
					valor = Constantes.COD_NUM_DOC_NO_EXISTE_CERT_CAB+"/"+
					        Constantes.NUM_DOC_NO_EXISTE_CERT_CAB;
					 flag =false;
				 }	 
			}	
			if(flag){
				 ma = new MaestroDetalle();
				 ma.setCodDetall(i.getMoneda()); 
				 int  moneda  = maestroDetalleDao.verificarMoneda(ma);		
				 if(moneda==0){				
					valor = Constantes.COD_MONEDA_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.MONEDA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){			
					valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  					
					 valor =  Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					          Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			 
			 /**VALIDACION DE CAMPOS DE INTF_DET09**/
			for(IntfDet09 d :detLista){
				 if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){						
						valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						        Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!d.getSecuencial().equals(i.getSecuencial())){					
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
							     Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 mc = new MaestroClasificador();
					 mc.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(mc);		
					 if(idClasifi==0){								
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}
				if(flag){
					 me = new Meta();
					 me.setAnoEje(i.getAnoEje()); 
					 me.setSecEjec(i.getSecEjec());
					 me.setSecFunc(d.getSecFunc()); 
					 int  secFunc  = metaDao.verificarExiteSecFunc(me);		
					 if(secFunc==0){								
						 valor = Constantes.COD_SEC_FUNC_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.SEC_FUNC_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
			   } 
			   if(flag){
					 mc = new MaestroClasificador();
					 mc.setAnoEje(i.getAnoEje());
					 mc.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(mc);		
					 if(nivClasificad==0){							
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				} 		
			}//fin del for
			
			 /**VALIDACION DE CAMPOS DE INTF_NOT**/
			 if(flag){
				 int  not  = intfNotDao.verificarSecuencialNot(n);
				 if(not >0 && flag){						
					 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_NOT+"/"+
						     Constantes.SECUENCIAL_EXISTE_INTF_NOT;
					 flag =false;
				 }	 
			 }
			 if(flag){				
				 if(!n.getSecuencial().equals(i.getSecuencial())){						
					 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_NOT+"/"+
						     Constantes.SECUENCIAL_NO_COINCIDE_INTF_NOT;
					 flag =false;
				 }	 
			 }
			 /*if(flag){
				 ExpedienteSecuencia e = new ExpedienteSecuencia();
				e.setCorrelativ(n.getCorrelativ()); 
				 int  idClasifi  = expedienteSecuenciaDao.verificarCorrelativIntfNotGastos(e);
				 if(idClasifi==0){						
					 valor = Constantes.COD_CORRELATIV_NO_EXISTE_INTF_NOT+"/"+
						     Constantes.CORRELATIV_NO_EXISTE_INTF_NOT;
					 flag =false;
				 }	 
			}*/ 	
		} catch (Exception e) {		
			logger.info("Error al validar los campos de Gastos devengado nuevo: "+e); 			
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				 i = null;	
			}
			if(detLista!=null){
				detLista =null;
			}
			if(n!=null){
				n=null;
			}			
			if(eje!=null){
				eje=null;
			}
			if(ma !=null){
				ma =null;
			}	          
			if(md!=null){
				md =null;
			}	           
			if(mc !=null){
				mc=null;
			}
			if(me !=null){
				me=null;
			}	
			if(certS!=null){
            	certS=null;	
            }
		}
		 return valor;
	}
    
    
    /**validar gastos devengado rebaja*/	
	@SuppressWarnings("unchecked")
   	@Override
   	public String validarGastosDevengRebaja(Map<String, Object> params) throws Exception {
   		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
   		 boolean flag = true;
   		 IntfCab i =null;
		 List<IntfDet09> detLista =null;
		 ExpedienteSecuencia exp =null;
		 Ejecutora e = null;
		 MaestroDocumento m = null;
		 MaestroDetalle ma = null;
		 MaestroClasificador mc = null;
		 Meta meta = null;
		 CertificadoSecuencia certS =null;
   		 try {
   			 i = (IntfCab) params.get("intfCab");    			 
   			 detLista = (List<IntfDet09>) params.get("listaDet");
   			 
   		     double montoTotal = (Double)params.get("montoTotal")*(-1);
   		     double montoMnTotal = (Double)params.get("montoMnTotal")*(-1);
   		     
   			 /**VALIDACION DE CAMPOS DE INTF_CAB I-D REBAJA**/
   		     exp = new ExpedienteSecuencia();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativo(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec());
			 exp.setAnoEje(i.getAnoEje());		 
			 exp.setCiclo(i.getCiclo());			 
			 exp.setSecEjec(i.getSecEjec()); 
			 
			 certS = new CertificadoSecuencia();			
			 certS.setCodDoc(i.getCodDoc());
			 certS.setNumDoc(i.getNumDoc()); 
			 certS.setAnoEje(i.getAnoEje());		
			 certS.setSecEjec(i.getSecEjec()); 
   			  
   			 if(flag){				
   				 int expeIngreso = expedienteSecuenciaDao.verificarExiteExpeGasto(exp);				
   				 if(expeIngreso==0){ 
   					 valor = Constantes.COD_EXISTE_DEVENGADO_PARA_REBAJA+"/"+
   					         Constantes.EXISTE_DEVENGADO_PARA_REBAJA;
   					 flag =false;
   				 }	 
   			}			
   			if(flag){
   				 int  cab = intfCabDao.verificarSecuencialCab(i);
   				 if(cab >0){
   					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
   					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
   					flag =false;
   				 }		
   			}
   			if(flag){
   				 e = new Ejecutora();
   				 e.setAnoEje(i.getAnoEje()); 
   				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
   				 if(anoEje ==0){
   					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
   					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
   					 flag =false;
   				 }	 
   			}
   			if(flag){
   				 e = new Ejecutora();
   				 e.setSecEjec(i.getSecEjec()); 
   			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
   				 if(secEje==0){
   					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
   					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
   					 flag =false;
   				 }	 
   			}			
   			if(flag){
   				 m = new MaestroDocumento();
   				 m.setCodDoc(i.getCodDoc()); 
   				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
   				 if(codDoc==0){
   					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
   					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
   					 flag =false;
   				 }	 
   			}
   			if(flag){				 
				 int  numDoc  = certificadoSecuenciaDao.verificarExiteCertificadoNumDoc(certS);				
				 if(numDoc!=0){					
					valor = Constantes.COD_NUM_DOC_NO_EXISTE_CERT_CAB+"/"+
					        Constantes.NUM_DOC_NO_EXISTE_CERT_CAB;
					 flag =false;
				 }	 
			}	
   			if(flag){
				 ma = new MaestroDetalle();
				 ma.setCodDetall(i.getMoneda()); 
				 int  moneda  = maestroDetalleDao.verificarMoneda(ma);		
				 if(moneda==0){				
					valor = Constantes.COD_MONEDA_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.MONEDA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}	
   			if(flag){					
   				 if(!validarEstadoE(i.getUeEnvio())){ 					
   					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
   					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
   					 flag =false;					
   				 }	 
   			}			
   			if(flag){				
   				 if(!validarEstadoES(i.getUeEstado())){  
   					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
   					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
   					 flag =false;
   				 }	 
   			}
   			
   			 /**VALIDACION DE CAMPOS DE INTF_DET09 G-D REBAJA**/
   			for(IntfDet09 d :detLista){
   				if(flag){
   					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
   					 if(det >0 && flag){
   						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
   						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
   						 flag =false;
   						 break;
   					 }	 
   				 }
   				 if(flag){				
   					 if(!i.getSecuencial().equals(d.getSecuencial())){
   						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
   						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
   						 flag =false;
   						 break;
   					 }	 
   				 }
   				 if(flag){
   					 mc = new MaestroClasificador();
   					 mc.setIdClasifi(d.getIdClasifi()); 
   					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(mc);		
   					 if(idClasifi==0){
   						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
   						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
   						 flag =false;
   						 break;
   					 }	 
   				}
   				if(flag){
   					 meta = new Meta();
   					 meta.setAnoEje(i.getAnoEje()); 
   					 meta.setSecEjec(i.getSecEjec());
   					 meta.setSecFunc(d.getSecFunc()); 
   					 int  secFunc  = metaDao.verificarExiteSecFunc(meta);		
   					 if(secFunc==0){								
   						 valor = Constantes.COD_SEC_FUNC_NO_EXISTE_INTF_DET09+"/"+
   							     Constantes.SEC_FUNC_NO_EXISTE_INTF_DET09;
   						 flag =false;
   						 break;
   					 }					
   			   } 
   			   if(flag){
   					 mc = new MaestroClasificador();
   					 mc.setAnoEje(i.getAnoEje());
   					 mc.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
   							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
   							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
   					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(mc);		
   					 if(nivClasificad==0){
   						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
   						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
   						 flag =false;
   						 break;
   					 }					
   				}			   
   			}//fin del for	
   			if(flag){				
   				double expeMonto = expedienteSecuenciaDao.bucarMontoTotalCompromiso(exp);
   				logger.info("Monto Total devengado por rebaja :  "+montoTotal); 
   				logger.info("Monto Total devengado por rebaja expediente:  "+expeMonto); 
   				if(expeMonto<=montoTotal){ 
   					valor = Constantes.COD_MONTO_DET09_MAYOR_MONTOINGRESO+"/"+
   					        Constantes.MONTO_DET09_MAYOR_MONTOINGRESO;
   					flag =false;				
   				}	 
   			} 
   			if(flag){				
   				double expeMontoMn = expedienteSecuenciaDao.bucarMontoMnTotalCompromiso(exp);
   				logger.info("Monto Mn Total devengado por rebaja :  "+montoMnTotal); 
   				logger.info("Monto MN Total devengado por rebaja expediente:  "+expeMontoMn);
   				if(expeMontoMn<=montoMnTotal){ 
   					valor = Constantes.COD_MONTOMN_DET09_MAYOR_MONTOINGRESO+"/"+
   					        Constantes.MONTOMN_DET09_MAYOR_MONTOINGRESO;
   					flag =false;				
   				}	 
   			}		
   		} catch (Exception ex) {				
   			logger.info("Error validar devengado rebaja "+ex); 
   			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
   		}finally{
   			if(i!=null){
				i=null;
			}
			if(detLista!=null){
				detLista=null;
			}
			if(exp!=null){
				exp=null;
			}
			if(e!=null){
				e=null;
			}
			if(m!=null){
				m=null;
			}
			if(ma!=null){
				ma=null;
			}
			if(meta!=null){
				meta=null;
			}
			if(mc!=null){
				mc=null;
			}
			if(certS!=null){
            	certS=null;	
            }
   		}
   		 return valor;
   	}
    
   	/**validar gastos devengado anulacion y anulacion por error*/	
	@SuppressWarnings("unchecked")
    @Override
	public String validarGastosDevengAnulXError(Map<String, Object> params) throws Exception {
    	 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 IntfCab i =null;
		 List<IntfDet09> detLista =null;
		 ExpedienteSecuencia exp =null;
		 Ejecutora e = null;
		 MaestroDocumento m = null;
		 MaestroClasificador ma = null;
		 Meta meta = null;
		 MaestroDetalle md = null;
		 CertificadoSecuencia certS = null;
		 try {
			 i = (IntfCab) params.get("intfCab"); 	     
			 detLista = (List<IntfDet09>) params.get("listaDet");
			 
		     double montoTotal = (Double)params.get("montoTotal")*(-1);
		     double montoMnTotal = (Double)params.get("montoMnTotal")*(-1);
		     
			 /**VALIDACION DE CAMPOS DE INTF_CAB G-D ANULACION Y ANULACION POR ERROR**/
		     exp = new ExpedienteSecuencia();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativo(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec());
			 exp.setAnoEje(i.getAnoEje());		 
			 exp.setCiclo(i.getCiclo());			 
			 exp.setSecEjec(i.getSecEjec()); 	
			 
			 certS = new CertificadoSecuencia();			
			 certS.setCodDoc(i.getCodDoc());
			 certS.setNumDoc(i.getNumDoc()); 
			 certS.setAnoEje(i.getAnoEje());		
			 certS.setSecEjec(i.getSecEjec()); 
			  
			 if(flag){				
				 int expeIngreso = expedienteSecuenciaDao.verificarExiteExpeGasto(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_DEVENGADO_PARA_ANULACION+"/"+
					         Constantes.EXISTE_DEVENGADO_PARA_ANULACION;
					 flag =false;
				 }	 
			}			
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}
			if(flag){
				 e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			if(flag){
				 m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){				 
				 int  numDoc  = certificadoSecuenciaDao.verificarExiteCertificadoNumDoc(certS);				
				 if(numDoc!=0){					
					valor = Constantes.COD_NUM_DOC_NO_EXISTE_CERT_CAB+"/"+
					        Constantes.NUM_DOC_NO_EXISTE_CERT_CAB;
					 flag =false;
				 }	 
			}	
			if(flag){
				 md = new MaestroDetalle();
				 md.setCodDetall(i.getMoneda()); 
				 int  moneda  = maestroDetalleDao.verificarMoneda(md);		
				 if(moneda==0){				
					valor = Constantes.COD_MONEDA_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.MONEDA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			
			 /**VALIDACION DE CAMPOS DE INTF_DET09 G-D ANULACION y ANULACION POR ERROR**/
			for(IntfDet09 d :detLista){
				 if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 ma = new MaestroClasificador();
					 ma.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(ma);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				} 
				if(flag){
					 meta = new Meta();
					 meta.setAnoEje(i.getAnoEje()); 
					 meta.setSecEjec(i.getSecEjec());
					 meta.setSecFunc(d.getSecFunc()); 
					 int  secFunc  = metaDao.verificarExiteSecFunc(meta);		
					 if(secFunc==0){								
						 valor = Constantes.COD_SEC_FUNC_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.SEC_FUNC_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
			   } 
			   if(flag){
					 ma = new MaestroClasificador();
					 ma.setAnoEje(i.getAnoEje());
					 ma.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(ma);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}			   
			}//fin del for	
			if(flag){
				double expeMonto = expedienteSecuenciaDao.bucarMontoTotalCompromiso(exp);				
				 logger.info("Monto Total devengado anulacion y x error:  "+montoTotal); 
				 logger.info("Monto Total devengado anulacion y x error expediente :  "+expeMonto); 
				 if(expeMonto!=montoTotal){ 
					 valor = Constantes.COD_MONTO_DET09_MAYOR_MONTOINGRESO+"/"+
					         Constantes.MONTO_DET09_MAYOR_MONTOINGRESO;
					 flag =false;					
				 }	 
			}
			if(flag){				
				 double expeMontoMn = expedienteSecuenciaDao.bucarMontoMnTotalCompromiso(exp); 
				 logger.info("Monto Mn Total devengado anulacion y x error:  "+montoMnTotal); 
				 logger.info("Monto Mn Total devengado anulacion y x error expediente:  "+expeMontoMn); 
				 if(expeMontoMn!=montoMnTotal){ 
					 valor = Constantes.COD_MONTOMN_DET09_MAYOR_MONTOINGRESO+"/"+
					         Constantes.MONTOMN_DET09_MAYOR_MONTOINGRESO;
					 flag =false;					
				 }	 
			}	
		} catch (Exception ex) {		
			logger.info("Error validar devengado anulacion y anulacion por error "+ex); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				i=null;
			}
			if(detLista!=null){
				detLista=null;
			}
			if(exp!=null){
				exp=null;
			}
			if(e!=null){
				e=null;
			}
			if(m!=null){
				m=null;
			}
			if(ma!=null){
				ma=null;
			}
			if(meta!=null){
				meta=null;
			}
			if(md!=null){
				md=null;
			}
			if(certS!=null){
            	certS=null;	
            }
		}
		 return valor;
	}
    
    
    /*******VALIDACION PARA GASTOS GIRADO (G-G)******/
   @SuppressWarnings("unchecked")
   @Override 
    public String validarGastosGiradoNuevo(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 IntfCab i =null;
		 List<IntfDet09> detLista  =null;
		 IntfNot n =null;
		 Ejecutora eje = null;
		 MaestroDetalle ma = null;
		 Area area = null;
		 MaestroDocumento md = null;
		 CertificadoFase fa =null;
		 Origen ori = null;
		 FuenteFinanc fte = null;
		 MaestroClasificador mc =null;
		 Meta me  =null;
		 CtaCte c =null;
		 Banco b =null;
		 ExpedienteSecuencia exp=null;
		 CertificadoSecuencia certS=null;
		 try {
			 i = (IntfCab) params.get("intfCab");  		    
			 detLista = (List<IntfDet09>) params.get("listaDet");			 
			 n = (IntfNot) params.get("intfNot");		 
			
			 /**VALIDACION PARA VERIFICAR SI EXITE EL CMPROMISO CASO CONTRARIO NO SE PUEDE HACER UN GIRADO**/
			 exp = new ExpedienteSecuencia();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativo(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec());
			 exp.setAnoEje(i.getAnoEje());		 
			 exp.setCiclo(i.getCiclo());			 
			 exp.setSecEjec(i.getSecEjec());
			 
			 certS = new CertificadoSecuencia();			
			 certS.setCodDoc(i.getCodDoc());
			 certS.setNumDoc(i.getNumDoc()); 
			 certS.setAnoEje(i.getAnoEje());		
			 certS.setSecEjec(i.getSecEjec()); 
			  
			if(flag){				
				 int expeIngreso = expedienteSecuenciaDao.verificarExiteExpeGasto(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_EXP_GIRADO_PARA_NUEVO+"/"+
					         Constantes.EXISTE_EXP_GIRADO_PARA_NUEVO;
					 flag =false;
				 }	 
			}
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab>0){ 
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		 
			}			 	
			if(flag){
				 eje = new Ejecutora();
				 eje.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(eje);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	
			}	
			if(flag){			
				 eje = new Ejecutora();
				 eje.setSecEjec(i.getSecEjec()); 
				 int  secEje  = maestroDetalleDao.verificarSecEje(eje);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){								
				 if(!validarTipoGiro(i.getTipoGiro())){ 
					 valor = Constantes.COD_TIPO_GIRO_INTFCAb_NO_VALIDO+"/"+
					         Constantes.TIPO_GIRO_INTFCAb_NO_VALIDO;
					 flag =false;
				 }			
			}
			if(flag){
				 md = new MaestroDocumento();
				 md.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(md); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }			
			}
			if(flag){				 
				 int  numDoc  = certificadoSecuenciaDao.verificarExiteCertificadoNumDoc(certS);				
				 if(numDoc!=0){					
					valor = Constantes.COD_NUM_DOC_NO_EXISTE_CERT_CAB+"/"+
					        Constantes.NUM_DOC_NO_EXISTE_CERT_CAB;
					 flag =false;
				 }	 
			}	
			if(flag){
				 c = new CtaCte();
				 c.setAnoEje(i.getAnoCta());  
				 int  ctacte  = ctaCteDao.verificarAnoCta(c);	
				 if(ctacte==0){
					 valor = Constantes.COD_ANO_CTA_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_CTA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){
				 b = new Banco();
				 b.setBanco(i.getBanco()); 
				 int banco  = bancoDao.verificarBanco(b);		
				 if(banco==0){
					 valor = Constantes.COD_BANCO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.BANCO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 c = new CtaCte();
				 c.setCtaCte(i.getCtaCte()); 
				 int  ctacte  = ctaCteDao.verificarCtaCte(c);		
				 if(ctacte==0){
					 valor = Constantes.COD_CTA_CTE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.CTA_CTE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){
				 ma = new MaestroDetalle();
				 ma.setCodDetall(i.getMoneda()); 
				 int  moneda  = maestroDetalleDao.verificarMoneda(ma);		
				 if(moneda==0){
					 valor = Constantes.COD_MONEDA_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.MONEDA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 md = new MaestroDocumento();
				 md.setCodDoc(i.getDcodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(md); 				
				 if(codDoc==0){
					 valor = Constantes.COD_DCOD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.DCOD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }			
			}
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			//falta estado_reg
			 
			 /**VALIDACION DE CAMPOS DE INTF_DET09**/
			for(IntfDet09 d :detLista){
				 if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 mc = new MaestroClasificador();
					 mc.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(mc);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }				
				} 
				if(flag){
					 me = new Meta();
					 me.setAnoEje(i.getAnoEje()); 
					 me.setSecEjec(i.getSecEjec());
					 me.setSecFunc(d.getSecFunc()); 
					 int  secFunc  = metaDao.verificarExiteSecFunc(me);		
					 if(secFunc==0){								
						 valor = Constantes.COD_SEC_FUNC_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.SEC_FUNC_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
			   } 
				if(flag){
					 mc = new MaestroClasificador();
					 mc.setAnoEje(i.getAnoEje());
					 mc.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(mc);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				} 		
			}//fin del for			
			 
			 /**VALIDACION DE CAMPOS DE INTF_NOT**/
			 if(flag){
				 int  not  = intfNotDao.verificarSecuencialNot(n);
				 if(not >0 && flag){
					 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_NOT+"/"+
					         Constantes.SECUENCIAL_EXISTE_INTF_NOT;
					 flag =false;
				 }	 
			 }
			 if(flag){				
				 if(!n.getSecuencial().equals(i.getSecuencial())){
					 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_NOT+"/"+
					         Constantes.SECUENCIAL_NO_COINCIDE_INTF_NOT;
					 flag =false;
				 }	 
			 }
			/* if(flag){
				 ExpedienteSecuencia e = new ExpedienteSecuencia();
				e.setCorrelativ(n.getCorrelativ()); 
				 int  idClasifi  = expedienteSecuenciaDao.verificarCorrelativIntfNotGastos(e);
				 if(idClasifi==0){						
					 valor = Constantes.COD_CORRELATIV_NO_EXISTE_INTF_NOT+"/"+
						     Constantes.CORRELATIV_NO_EXISTE_INTF_NOT;
					 flag =false;
				 }	 
			} */	
		} catch (Exception e) {			
			logger.info("Error validacion gastos girado nuevo:  "+e); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}finally{
			if(i!=null){
				 i = null;	
			}
			if(detLista!=null){
				detLista =null;
			}
			if(n!=null){
				n=null;
			}			
			if(eje!=null){
				eje=null;
			}
			if(ma !=null){
				ma =null;
			}
			if(area!=null){
				area=null;
			}
			if(md!=null){
				md =null;
			}
			if(fa !=null){
				fa=null;
			}
			if(ori !=null){
				ori=null;
			}
			if(fte !=null){
				fte=null;
			}
			if(mc !=null){
				mc=null;
			}
			if(me !=null){
				me=null;
			}	
			if(c !=null){
				c=null;
			}
			if(b !=null){
				b=null;
			}
			if(certS!=null){
            	certS=null;	
            }
		}
		 return valor;
	}	
   
	/**validar gastos girado anulacion y anulacion por error*/	
	@SuppressWarnings("unchecked")
    @Override
	public String validarGastosGiradoAnulXError(Map<String, Object> params) throws Exception {
   	 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
   	     logger.info("ingresando a validar girado anulacion y anulacion por error"); 
		 boolean flag = true;
		 IntfCab i =null;
		 List<IntfDet09> detLista =null;
		 ExpedienteSecuencia exp =null;
		 Ejecutora e = null;
		 MaestroDocumento m = null;
		 MaestroClasificador ma = null;
		 Meta meta = null;
		 MaestroDetalle md = null;
		 CertificadoSecuencia certS = null;
		 try {
			 i = (IntfCab) params.get("intfCab"); 	     
			 detLista = (List<IntfDet09>) params.get("listaDet");
			 
		     double montoTotal = (Double)params.get("montoTotal")*(-1);
		     double montoMnTotal = (Double)params.get("montoMnTotal")*(-1);
		     
			 /**VALIDACION DE CAMPOS DE INTF_CAB G-G ANULACION Y ANULACION POR ERROR**/
		     exp = new ExpedienteSecuencia();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativo(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec());
			 exp.setAnoEje(i.getAnoEje());		 
			 exp.setCiclo(i.getCiclo());			 
			 exp.setSecEjec(i.getSecEjec());
			 
			 certS = new CertificadoSecuencia();			
			 certS.setCodDoc(i.getCodDoc());
			 certS.setNumDoc(i.getNumDoc()); 
			 certS.setAnoEje(i.getAnoEje());		
			 certS.setSecEjec(i.getSecEjec()); 
			  
			 if(flag){				
				 int expeIngreso = expedienteSecuenciaDao.verificarExiteExpeGasto(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_EXP_GIRADO_PARA_NUEVO+"/"+
					         Constantes.EXISTE_EXP_GIRADO_PARA_NUEVO;
					 flag =false;
				 }	 
			}			
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}
			if(flag){
				 e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			if(flag){
				 m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){				 
				 int  numDoc  = certificadoSecuenciaDao.verificarExiteCertificadoNumDoc(certS);				
				 if(numDoc!=0){					
					valor = Constantes.COD_NUM_DOC_NO_EXISTE_CERT_CAB+"/"+
					        Constantes.NUM_DOC_NO_EXISTE_CERT_CAB;
					 flag =false;
				 }	 
			}	
			if(flag){
				 md = new MaestroDetalle();
				 md.setCodDetall(i.getMoneda()); 
				 int  moneda  = maestroDetalleDao.verificarMoneda(md);		
				 if(moneda==0){				
					valor = Constantes.COD_MONEDA_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.MONEDA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			
			 /**VALIDACION DE CAMPOS DE INTF_DET09 G-G ANULACION y ANULACION POR ERROR**/
			for(IntfDet09 d :detLista){
				 if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 ma = new MaestroClasificador();
					 ma.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(ma);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				} 
				if(flag){
					 meta = new Meta();
					 meta.setAnoEje(i.getAnoEje()); 
					 meta.setSecEjec(i.getSecEjec());
					 meta.setSecFunc(d.getSecFunc()); 
					 int  secFunc  = metaDao.verificarExiteSecFunc(meta);		
					 if(secFunc==0){								
						 valor = Constantes.COD_SEC_FUNC_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.SEC_FUNC_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
			   } 
			   if(flag){
					 ma = new MaestroClasificador();
					 ma.setAnoEje(i.getAnoEje());
					 ma.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(ma);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}			   
			}//fin del for	
			logger.info("Ingresando a verificar montos"); 
			if(flag){
				 double expeMonto = expedienteSecuenciaDao.bucarMontoTotalCompromiso(exp);				
				 logger.info("Monto Total devengado anulacion y x error:  "+montoTotal); 
				 logger.info("Monto Total devengado anulacion y x error expediente :  "+expeMonto); 
				 if(expeMonto!=montoTotal){ 
					 valor = Constantes.COD_MONTO_DET09_MAYOR_MONTOINGRESO+"/"+
					         Constantes.MONTO_DET09_MAYOR_MONTOINGRESO;
					 flag =false;					
				 }	 
			}
			if(flag){				
				 double expeMontoMn = expedienteSecuenciaDao.bucarMontoMnTotalCompromiso(exp); 
				 logger.info("Monto Mn Total devengado anulacion y x error:  "+montoMnTotal); 
				 logger.info("Monto Mn Total devengado anulacion y x error expediente:  "+expeMontoMn); 
				 if(expeMontoMn!=montoMnTotal){ 
					 valor = Constantes.COD_MONTOMN_DET09_MAYOR_MONTOINGRESO+"/"+
					         Constantes.MONTOMN_DET09_MAYOR_MONTOINGRESO;
					 flag =false;					
				 }	 
			}	
		} catch (Exception ex) {		
			logger.info("Error validar girado anulacion y anulacion por error "+ex); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
			ex.printStackTrace();
		}finally{
			if(i!=null){
				i=null;
			}
			if(detLista!=null){
				detLista=null;
			}
			if(exp!=null){
				exp=null;
			}
			if(e!=null){
				e=null;
			}
			if(m!=null){
				m=null;
			}
			if(ma!=null){
				ma=null;
			}
			if(meta!=null){
				meta=null;
			}
			if(md!=null){
				md=null;
			}
			if(certS!=null){
            	certS=null;	
            }
		}
		 return valor;
	}
   
   
	
	private boolean validarEstadoE(String cadena){
		boolean estado = false;
		if(ESTADO_ENVIO_P.equals(cadena)){
			estado= true;
		}else if(ESTADO_ENVIO_N.equals(cadena)){
		  estado = true;	
		}
		return estado;
	}
	
	private boolean validarEstadoES(String cadena){
		boolean estado = false;
		if(ESTADO_ENVIO_P.equals(cadena)){
			estado= true;
		}else if(ESTADO_ENVIO_N.equals(cadena)){
		    estado = true;	
		}else if(ESTADO_ENVIO_R.equals(cadena)){
		   estado = true;
		}
		return estado;
	}
	
	private boolean validarTipoGiro(String tipoGiro){
		 if(T_GIRO_COBRANZA.equals(tipoGiro)){ 
			return true;
		 }else if(T_GIRO_DETRACCIONES.equals(tipoGiro)){ 
			return true;
		 }else if(T_GIRO_NORMAL.equals(tipoGiro)){ 
			 return true;
		 }else if(T_GIRO_RETENCION.equals(tipoGiro)){ 
			 return true;
		 }else{
			 return false;
		 }
	}	
	

}
